#1 添加cmake版本说明
cmake_minimum_required(VERSION 3.1.3)
#2 声明工程名称
project(file_server)
#3 检测并生成proto框架代码
#   1 添加所需的proto框架代码文件名称
set(proto_path ${CMAKE_CURRENT_SOURCE_DIR}/../proto/) #CMAKE_CURRENT_SOURCE_DIR 表示 CMakeLists.txt 所在目录
set(proto_files base.proto file.proto)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") #用于存储 C++ 编译器的编译选项。
#   2 检查框架代码文件是否生成
set(proto_srcs "")
set(proto_hxx "") #设置变量
set(proto_cxx "") #设置变量
foreach(proto_file ${proto_files})
#   3 如果没有生成，则预定义生成指令 -- 用于在构建项目之前生成框架代码
    string(REPLACE ".proto" ".pb.cc" proto_cxx ${proto_file}) #将.hxx替换为-proto.hxx，存于变量proto_hxx，要被替换的文件是proto_file
    string(REPLACE ".proto" ".pb.h" proto_hxx ${proto_file})
    if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/${proto_cxx}) #CMAKE_CURRENT_BINARY_DIR表示cmake执行命令时所在的工作路径
        #proto -d mysql --generate-query --generate-schema --profile boost/date-time student.hxx
        #执行外部指令
        add_custom_command(
            PRE_BUILD #表示在所有其他步骤之前执行自定义命令
            COMMAND protoc #要执行的指令名称
            ARGS --cpp_out=${CMAKE_CURRENT_BINARY_DIR} -I ${proto_path} ${proto_path}/${proto_file} #要执行的指令运行参数选项
            DEPENDS ${proto_path}/${proto_file} #指定命令的依赖项,源码文件
            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${proto_cxx} #指定要生成的目标名称
            COMMENT "生成proto框架代码文件：" ${proto_cxx} #执行命令时要打印的内容
            )
        endif()
#   4 将所有生成的框架代码文件名称保存起来
    list(APPEND proto_srcs ${CMAKE_CURRENT_BINARY_DIR}/${proto_cxx}) #所有的.cxx文件保存起来
endforeach()
#4 获取源码目录下的所有源码文件
set(src_files "")
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source src_files)
#5 声明目标及依赖
add_executable(file_server ${proto_srcs} ${src_files})

# 获取客户端源文件
set(client_files "")
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/test client_files)
add_executable(file_client ${proto_srcs} ${client_files})

#6 设置头文件默认搜索路径
include_directories(${CMAKE_CURRENT_BINARY_DIR}/)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../common/)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../third)
#7 设置要连接的库
target_link_libraries(file_server -lgtest -lgflags -lspdlog -lfmt -lbrpc -lssl -lcrypto -lprotobuf -lleveldb -letcd-cpp-api -lcpprest -lcurl /usr/lib/x86_64-linux-gnu/libjsoncpp.so.19)

target_link_libraries(file_client -lgtest -lgflags -lspdlog -lfmt -lbrpc -lssl -lcrypto -lprotobuf -lleveldb -letcd-cpp-api -lcpprest -lcurl /usr/lib/x86_64-linux-gnu/libjsoncpp.so.19)

#设置安装路径为bin
# INSTALL(TARGETS server client RUNTIME DESTINATION bin)
INSTALL(TARGETS file_server RUNTIME DESTINATION bin)

